package com.hk.utils;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ArrayUtils;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.math.BigInteger;
import java.security.MessageDigest;

/**
 * 获取MD5值
 *
 * @author
 */
@Slf4j
public class DigestUtils {


    /**
     * 获取上传文件的md5
     *
     * @param file
     * @return
     * @throws IOException
     */
    public static String getMd5(MultipartFile file) {
        try {
            return getMd5(file.getBytes());
        } catch (IOException e) {
            log.error(e.getMessage());
        }
        return null;
    }

    /**
     * 获取字符串的MD5
     * @param val
     * @return
     */
    public static  String getMd5(String val){
         if(val == null){
             return null;
         }
         return getMd5(val.getBytes());
    }

    /**
     * 获取字节数组的MD5
     * @param bytes
     * @return
     */
    public static String getMd5(byte[] bytes) {
        try {
            MessageDigest md5 = MessageDigest.getInstance("MD5");
            byte[] digest = md5.digest(bytes);
            String hashString = new BigInteger(1, digest).toString(16);
            return hashString;
        } catch (Exception e) {
            log.error(e.getMessage());
        }
        return null;
    }

    /**
     *  获取文件的md5
     * @param file 文件
     * @param md5Solt md5的盐
     * @return md5加密字符窜
     */
    public static String getMd5WithSolt(MultipartFile file, String md5Solt) {

        try {
            byte[] bytes = file.getBytes();
            byte[] result= ArrayUtils.addAll(bytes,md5Solt.getBytes());
            return getMd5(result);
        }catch (Exception e){
            log.error("文件混盐加密失败",e);
        }
        return null;
    }
}